/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.javiermoreno.bankof.dominio;

import com.javiermoreno.framework.errores.BusinessException;
import java.util.Comparator;

/**
 *
 * @author ciberado
 */
public class ProductoFinanciero {

    private String codigo;
    private double saldo;
    private double interesAnual;

    public ProductoFinanciero() {
    }

    public ProductoFinanciero(String codigo, double saldo, double interesAnual) {
        this.codigo = codigo;
        this.saldo = saldo;
        this.interesAnual = interesAnual;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public double getInteresAnual() {
        return interesAnual;
    }

    public void setInteresAnual(double interesAnual) {
        this.interesAnual = interesAnual;
    }

    public double getSaldo() {
        return saldo;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ProductoFinanciero other = (ProductoFinanciero) obj;
        if ((this.codigo == null) ? (other.codigo != null) : !this.codigo.equals(other.codigo)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 37 * hash + (this.codigo != null ? this.codigo.hashCode() : 0);
        return hash;
    }

    public void ingresar(double importe) {
        if (importe < 0.0) {
            throw new IllegalArgumentException("ProductoFinanciero.ingresar.Error.ImporteNoValido");
        }
        this.saldo = this.saldo + importe;
    }

    public void reintegrar(double importe) {
        if (importe < 0.0) {
            throw new IllegalArgumentException("ProductoFinanciero.reintegrar.Error.ImporteNoValido");
        }
        if (importe > this.saldo) {
            throw new BusinessException("ProductoFinanciero.reintegrar.Error.ImporteSuperiorSaldo");
        }
        this.saldo = this.saldo - importe;
    }

    public void actualizarInteresMensual() {
        this.saldo = this.saldo * (1.0 + this.interesAnual / 12.0);
    }
    
    
    public static class CodigoComparator implements Comparator<ProductoFinanciero> {
        public CodigoComparator(boolean asc) {
        }

        @Override
        public int compare(ProductoFinanciero pf0, ProductoFinanciero pf1) {
            int orden = 0;
            
            return orden;
        }
        
    }

    
    
}
